home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 July / EnigmA AMIGA RUN 20 (1997)(G.R. Edizioni)(IT)[!][issue 1997-07 & 08][EAR-CD IV].iso / lightwave / lwmlist / 96.lightwave-0215 / 000327_dwarner@webcom.com _Wed Feb 21 15:01:25 1996.msg < prev    next >
Internet Message Format  |  1996-02-29  |  8KB

  1. Received: from mail.webcom.com (mail.webcom.com [206.2.192.68]) by keeper.albany.net (8.7.1/8.7.1) with ESMTP id PAA25605 for <DWARNER@ALBANY.NET>; Wed, 21 Feb 1996 15:01:11 -0500 (EST)
  2. Received: from localhost by mail.webcom.com with SMTP
  3.     (1.37.109.15/16.2) id AA123992937; Wed, 21 Feb 1996 12:02:17 -0800
  4. Date: Wed, 21 Feb 1996 12:02:17 -0800
  5. Errors-To: dwarner@ALBANY.NET
  6. Message-Id: <199602211948.LAA02498@netcom16.netcom.com>
  7. Errors-To: dwarner@ALBANY.NET
  8. Reply-To: lightwave@garcia.com
  9. Originator: lightwave@garcia.com
  10. Sender: lightwave@garcia.com
  11. Precedence: bulk
  12. From: bhood@netcom.com (robert hood)
  13. To: lightwave@mail.webcom.com
  14. Subject: Progress Report: Layout scripting
  15. X-Listprocessor-Version: 6.0c -- ListProcessor by Anastasios Kotsikonas
  16. Status: RO
  17. X-Status: 
  18.  
  19. Sorry to take up bandwidth, but there are individuals on this list that
  20. have expressed an interest in this.
  21.  
  22. I have made a minor step forward in Layout scripting.  The following
  23. BML ImageFilter script (lengthy because of comments) is fully functional
  24. as I write.  It can even be saved along with a scene file and automatically
  25. reloaded the next time the scene is loaded:
  26.  
  27. //---------------------------------------------------------------------------
  28. // BML/IF:  Black & White
  29. //
  30. //        Post-process a color frame into black and white.
  31. //
  32. // if a function is not declared, BML/IF will default its behavior.  The
  33. // available ImageFilter scripting functions are:
  34. //
  35. //           process()    called for each frame to process the selected
  36. //                        buffer(s)
  37. //           flags()      called once to specify buffers needed by plugin
  38. //           options()    called to interact with the user
  39. //           create()     called once at plugin startup to perform creation
  40. //                        activities
  41. //           destroy()    called once just prior to plugin removal to
  42. //                        perform shutdown activities
  43. //           load()       called when a scene is loaded that previously
  44. //                        used this script to load stored parameters
  45. //           save()       called when a scene is saved so that the
  46. //                        script may store needed parameters
  47. //
  48. // the plugin interface function copy() is not implemented as the script
  49. // maintains it own data.
  50. //
  51. // NOTE: whether the flags() function is defined or not, ImageFilter scripts
  52. // automatically have access to the RED, GREEN, BLUE, and ALPHA buffers.
  53. //---------------------------------------------------------------------------
  54.  
  55. var     gamma;  // this needs to be global so all commands can access it
  56.  
  57. //---------------------------------------------------------------------------
  58. // every process() declaration must accept five arguments
  59.  
  60. process: width, height, frame, starttime, endtime
  61. {
  62.     var red[width];
  63.     var green[width];
  64.     var blue[width];
  65.     var alpha[width];
  66.     var out[3];
  67.     var i,j;
  68.     var average;
  69.  
  70.     moninit(height);
  71.  
  72.     for(i = 0;i < height;++i)
  73.     {
  74.         red   = bufferline(RED,i);
  75.         green = bufferline(GREEN,i);
  76.         blue  = bufferline(BLUE,i);
  77.         alpha = bufferline(ALPHA,i);
  78.  
  79.         for(j = 1;j <= width;++j)
  80.         {
  81.             if(red[j] == 0 && green[j] == 0 && blue[j] == 0)
  82.                 average = 0;
  83.             else
  84.                 average = integer((red[j] + green[j] + blue[j]) / 3);
  85.  
  86.             if(gamma)
  87.             {
  88.                 average += gamma;
  89.                 if(average < 0)
  90.                     average = 0;
  91.                 else if(average > 255)
  92.                     average = 255;
  93.             }
  94.  
  95.             out[] = average;    // populate the whole array with
  96.                                 // the same value
  97.  
  98.             setrgb(j - 1,i,out);
  99.             setalpha(j - 1,i,alpha[j]);
  100.         }
  101.  
  102.         if(monstep())
  103.             return;
  104.     }
  105.  
  106.     monend();
  107. }
  108.  
  109. //-----------------------------------------------------------------
  110. // we don't really need this function for this plugin, but it is
  111. // here for illustration
  112.  
  113. flags
  114. {
  115.     // available buffers are:
  116.     // SPECIAL      LUMINOUS        DIFFUSE
  117.     // MIRROR       TRANS           RAWRED
  118.     // RAWGREEN     RAWBLUE         SHADING
  119.     // SHADOW       GEOMETRY        DEPTH
  120.     // (RED)        (GREEN)         (BLUE)      (ALPHA)
  121.  
  122.     return(RED,GREEN,BLUE,ALPHA);   // select the defaults just for fun  =|^)
  123. }
  124.  
  125. //-----------------------------------------------------------------
  126. // this command is invoked when the user presses the "Options"
  127. // button on the plugin interface (all BML Layout plugins currently
  128. // employ the Common Plugin Interface (CPI) Toolkit).
  129.  
  130. options
  131. {
  132.     var c1;
  133.  
  134.     reqbegin("Black & White");
  135.  
  136.     c1 = addcontrol(gamma,"Gamma correction");
  137.  
  138.     if(reqpost())
  139.         gamma = getvalue(c1);
  140.  
  141.     reqend();
  142. }
  143.  
  144. //-----------------------------------------------------------------
  145. // create() is invoked as soon as the BML engine plugin is loaded
  146. // and this script is successfully compiled.
  147. //
  148. // a companion command, destroy(), is called when the plugin is
  149. // being shutdown (either by an explicit action of the user, or
  150. // when the Layout session is terminated).  the destroy() command
  151. // is not used in this script because we have no activities that
  152. // need to be performed during a shutdown.
  153.  
  154. create
  155. {
  156.     // initialize the 'gamma' value (a later load() or options()
  157.     // call may alter it)
  158.  
  159.     gamma = 0;
  160. }
  161.  
  162. //-----------------------------------------------------------------
  163. // load() is called when the user loads a scene file where this
  164. // script was active.  the BML engine will automatically reload
  165. // and recompile this script in such a case.  in load(), we need to
  166. // read in our save()'d operating parameters.
  167.  
  168. load: what,     // 'what' is either SCENE (ASCII) or OBJECT (binary)
  169.       io        // a pseudo-FileObject that only supports a subset of the
  170.                      // full FileObject methods (i.e., random access
  171.                      // functions such as rewind() are not supported)
  172. {
  173.     var line;
  174.     var items[2];
  175.  
  176.     if(what == SCENE)   // processing an ASCII scene file
  177.     {
  178.         line = nil;     // a return of 'nil' can indicate either a
  179.                         // blank line or eof
  180.  
  181.         while(line == nil && io.eof() != true)
  182.             line = io.read();
  183.  
  184.         items = parse(" ",line);
  185.  
  186.         if(items[1] == "Gamma")
  187.             gamma = integer(items[2]);
  188.     }
  189.     else if(what == OBJECT) // processing a binary LightWave object file
  190.     {
  191.         // we don't grok OBJECT files
  192.     }
  193. }
  194.  
  195. //-----------------------------------------------------------------
  196. // save() is activated when the user saves a scene file where this
  197. // script is active.  in save(), we need to store our operating
  198. // parameters into the scene file.
  199.  
  200. save: what, io
  201. {
  202.     if(what == SCENE)       // save our working parameters for a later load
  203.         io.writeln("Gamma ",gamma);
  204. }
  205. //---------------------------------------------------------------------------
  206.  
  207. Thanks for the bandwidth.
  208.  
  209. Render me gone,               |||
  210. Bob                         ^(===)^
  211. -------------------------oOO--(_)--OOo--------------------------------------
  212. Bob Hood, President | All governments suffer from a recurring problem:
  213. Virtual Visions,Inc.| Power attracts pathological personalities.  It is not
  214. Tel: 1.303.989.4191 | that power corrupts, but that it is magnetic to the
  215. FAX: 1.303.727.7555 | corruptible.  Such people have a tendency to become
  216.                     | drunk on violence, a condition to which they are
  217. bhood@netcom.com    | quickly addicted              - Frank Herbert
  218. ----------------------------------------------------------------------------